package fr.demos.cinepantin;

import java.io.Serializable;
import java.util.ArrayList;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.OneToMany;

import fr.demos.cinepantin.enumerate.Tva;
import fr.demos.cinepantin.exception.StockException;

/**
 * Author CQP-DNT
 * Class Panier
 */

@Entity
public class Panier implements Serializable {
	@Id
	private int idPanier;
	private Client client;

	/**
	 * @param idPanier
	 * 
	 */

	private ArrayList<LignePanier> contenu = new ArrayList<LignePanier>();

	/**
	 * Constructeur panier
	 * 
	 * @param idPanier
	 * @param client
	 * @param contenu
	 */

	public Panier(int idPanier, Client client, ArrayList<LignePanier> contenu) {
		this.idPanier = idPanier;
		this.client = client;
		this.contenu = contenu;
	}

	public Panier() {

	}

	/**
	 * 
	 * @return idPanier
	 */

	public int getIdPanier() {
		return idPanier;
	}

	public void setIdPanier(int idPanier) {
		this.idPanier = idPanier;
	}

	/**
	 * 
	 * @return contenu de la ligne panier
	 */

	public ArrayList<LignePanier> getContenu() {
		return contenu;
	}

	/**
	 * 
	 * @param set
	 *            contenu de la ligne panier
	 */
	public void setContenu(ArrayList<LignePanier> contenu) {
		this.contenu = contenu;
	}

	/**
	 * 
	 * @return client
	 */

	public Client getClient() {
		return this.client;
	}

	/**
	 * 
	 * @param set
	 *            client
	 */

	public void setClient(Client cli) {
		this.client = cli;
	}

	/**
	 * Methode pour ajouter un article dans le stock lors de saisir articles
	 * avec la quantite
	 * 
	 * @param article
	 * @param quantite
	 */
	public void ajouterArticle(Article article, int quantite) {
		for (LignePanier lignepanier : contenu) {
			if (lignepanier.getArticle().equals(article)) {
				lignepanier.setQuantite(lignepanier.getQuantite() + quantite);

				return;
			}
		}

		contenu.add(new LignePanier(article, quantite));

	}

	/**
	 * Methode pour enlever un articles du stock lors que cet article est
	 * ajouter dans le panier
	 * 
	 * @param a
	 * @param quantite
	 */
	public void enleverArticle(Article a, int quantite) {
		for (LignePanier lignepanier : contenu) {
			if (lignepanier.getArticle().equals(a)) {
				if (lignepanier.getQuantite() - quantite <= 0) {
					contenu.remove(lignepanier);
				} else {
					lignepanier.setQuantite(lignepanier.getQuantite()
							- quantite);
				}
				return ;
			}
		}

		a.rajouterAuStock(quantite);

	}

	/**
	 * methode incrementation articles dans la ligne panier qui retire les
	 * articles du stock
	 * 
	 * @param article
	 * @param quantite
	 * @throws StockException
	 */
	public void ajouter(Article article, int quantite) throws StockException {
		article.retirerDuStock(quantite);
		if (article.getStock() > 0) {
			ajouterArticle(article, quantite);
		}

	}

	/**
	 * Methode supprimer articles du panier avec la quantité
	 * 
	 * @param article
	 */

	public void retirer(Article article) {
		int quantite = 0;
		for (LignePanier lignepanier : contenu) {
			if (lignepanier.getArticle().equals(article)) {
				quantite = lignepanier.getQuantite();
				contenu.remove(lignepanier);
				break;

			}
		}

		article.rajouterAuStock(quantite);

	}
	
	/**
	 * Methode pour calculer le montant totale (prix de vente + tva) d'un article 
	 * @return Res(montant totale)
	 */

	 public int getNbArticle(){
	
	 int nbArticle = 0;
	 for(LignePanier lp : contenu){
	 nbArticle += lp.getQuantite();
	
	 }
	 return nbArticle ;
	
	 }
	 
		public double getMontantTotal() {
			double prixTotal = 0.;
			for (LignePanier lignep : contenu) {
				prixTotal += lignep.getMontant();
//				prixTotale = this.getPrixVente() + ( (this.getPrixVente() * this.getTva().getValeur() ));
			}
			return prixTotal; // +Tva.getValeur() ;
		}
	

}
